package com.atguigu.gmall.product.controller.api;

import com.atguigu.gmall.common.cache.Java0828GmallCache;
import com.atguigu.gmall.model.product.*;
import com.atguigu.gmall.product.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/***
 * 供商品详情微服务调用的控制层
 */
@RestController
@RequestMapping("/api/item")
public class ProductFeignController {

    @Autowired
    private SkuInfoService skuInfoService;

    @Autowired
    private BaseCategoryViewService baseCategoryViewService;

    @Autowired
    private SkuImageService skuImageService;

    @Autowired
    private SpuSaleAttrService spuSaleAttrService;

    @Autowired
    private SkuSaleAttrValueService skuSaleAttrValueService;

    @Autowired
    private BaseTrademarkService baseTrademarkService;

    @Autowired
    private BaseAttrInfoService baseAttrInfoService;

    /**
     * 取消订单，回滚商品库存
     * @param skuIdAndSkuNumMap
     * @return
     */
    @PutMapping("/rollbackStock")
    public Boolean rollbackStock(@RequestParam Map<String,Object> skuIdAndSkuNumMap){
        //1 校验参数
        if(skuIdAndSkuNumMap.isEmpty()){
            return false;
        }

        try{
            //2 调用业务层方法
            return skuInfoService.rollbackStock(skuIdAndSkuNumMap);
        }catch (Exception e){
            e.printStackTrace();
        }

        //返回
        return false;
    }

    /**
     * 订单生成减库存
     * @return
     */
    @PutMapping("/decount")
    public Boolean decount(@RequestParam Map decountMap){
        //校验参数
        if(decountMap.isEmpty()){
            return false;
        }

        try{
            //调用业务层方法
            return skuInfoService.decount(decountMap);
        }catch (Exception e){
            e.printStackTrace();
        }

        //返回
        return false;
    }

    /**
     * 拿到指定skuId的商品的平台属性和属性值集合
     * @param skuId
     * @return
     */
    @GetMapping("/listBaseAttrInfoBySkuId/{skuId}")
    public List<BaseAttrInfo> listBaseAttrInfoBySkuId(@PathVariable("skuId")Long skuId){
        //1 调用业务层方法
        List<BaseAttrInfo> baseAttrInfoList = baseAttrInfoService.listBySkuId(skuId);

        //2 响应数据
        return baseAttrInfoList;
    }

    /**
     * 根据品牌id查询品牌信息
     * @param tmId
     * @return
     */
    @GetMapping("/getBaseTrademarkById/{tmId}")
    public BaseTrademark getBaseTrademarkById(@PathVariable("tmId") Long tmId){
        BaseTrademark baseTrademark = baseTrademarkService.getById(tmId);
        return baseTrademark;
    }

    /**
     * 根据spuId查询sku与销售属性值组合键值对
     * @param spuId
     * @return
     */
    @Java0828GmallCache(prefix = "listSkuSaleAttrValueBySpuId:")
    @GetMapping("/listSkuSaleAttrValueBySpuId/{spuId}")
    public Map listSkuSaleAttrValueBySpuId(@PathVariable("spuId") Long spuId){
        return skuSaleAttrValueService.listSkuSaleAttrValueBySpuId(spuId);
    }

    /**
     * 根据spuid和skuid查询当前商品所属spu的全部销售属性和值,并且标识当前应该选中哪几个值
     * @param skuId
     * @return
     */
    @Java0828GmallCache(prefix = "listSpuSaleAttrBySpuIDAndSkuId:")
    @GetMapping("/listSpuSaleAttrBySpuIDAndSkuId/{spuId}/{skuId}")
    public List<SpuSaleAttr> listSpuSaleAttrBySpuIDAndSkuId(@PathVariable("spuId") Long spuId,
                                                            @PathVariable("skuId") Long skuId){
        return spuSaleAttrService.listSpuSaleAttrBySpuIDAndSkuId(spuId,skuId);
    }

    /**
     * 根据skuId查询价格
     * @param skuId
     * @return
     */
    @Java0828GmallCache(prefix = "getSkuInfoPriceBySkuId:")
    @GetMapping("/getSkuInfoPriceBySkuId/{skuId}")
    public BigDecimal getSkuInfoPriceBySkuId(@PathVariable("skuId") Long skuId){
        return skuInfoService.getSkuInfoPriceBySkuId(skuId);
    }

    /**
     * 根据skuId查询商品对应的图片
     * @param skuId
     * @return
     */
    @Java0828GmallCache(prefix = "listSkuImageBySkuId:")
    @GetMapping("/listSkuImageBySkuId/{skuId}")
    public List<SkuImage> listSkuImageBySkuId(@PathVariable("skuId") Long skuId){
        return skuImageService.listBySkuId(skuId);
    }

    /**
     * 根据category3Id查询一、二、三分类数据
     * @param category3Id
     * @return
     */
    @Java0828GmallCache(prefix = "listCategoryByCategory3Id:")
    @GetMapping("/listCategoryByCategory3Id/{category3Id}")
    public BaseCategoryView listCategoryByCategory3Id(@PathVariable("category3Id") Long category3Id){
        return baseCategoryViewService.listCategoryByCategory3Id(category3Id);
    }

    /**
     * 查询商品详情信息
     * @param skuId
     * @return
     */
    @Java0828GmallCache(prefix = "getSkuInfoBySkuId:")
    @GetMapping("/getSkuInfoBySkuId/{skuId}")
    public SkuInfo getSkuInfoBySkuId(@PathVariable("skuId") Long skuId){
        //1 调用业务层方法
        SkuInfo skuInfo = skuInfoService.getBySkuId(skuId);
//        SkuInfo skuInfo = skuInfoService.getBySkuIdByRedisOrMySql(skuId);
        //2 响应数据
        return skuInfo;
    }
}
